Modul 14 von 16 · 📖 7 min Lesezeit · ⏱ 30 min gesamt

FI-AE 14 Backend-Architekturen — Monolith vs. Microservices

Inhaltsverzeichnis (6 Abschnitte)
  1. Konzepte und Hintergrund
  2. Architektur-Diagramm
  3. Praktische Schritte
  4. Häufige Fallstricke
  5. Weiterführende Ressourancen
  6. Wissens-Check

FI-AE 14 Backend-Architekturen — Monolith vs. Microservices

In diesem Modul erkunden Sie die grundlegenden Backend-Architekturen der modernen Softwareentwicklung. Sie lernen die Vor- und Nachteile von monolithischen und microservices-basierten Systemen kennen und verstehen, wie diese Architekturen die Skalierbarkeit, Wartbarkeit und Entwicklungsgeschwindigkeit beeinflussen. Sie erhalten Einblicke in Schlüsselkonzepte wie API-Gateways, Service-Discovery und asynchrone Kommunikation über Queues und Events.

Konzepte und Hintergrund

Monolithische Architektur
Ein einzelnes, zusammenhängendes Anwendungssystem, bei dem alle Funktionen in einer Codebasis entwickelt und als Einheit bereitgestellt werden. Die Komponenten sind eng miteinander gekoppelt.
Microservices-Architektur
Ein Ansatz, bei dem eine Anwendung als Satz kleinerer, unabhängiger Dienste entwickelt wird, die über definierte Schnittstellen kommunizieren. Jeder Service ist eigenständig deploybar und skalierbar.
API-Gateway
Ein zentraler Einstiegspunkt für alle Client-Anfragen, der Anfragen an die entsprechenden Microservices weiterleitet, Authentifizierung durchführt und Lastverteilung übernimmt.
Service-Discovery
Ein Mechanismus, der es Microservices ermöglicht, die Netzwerkadressen anderer Dienste dynamisch zu ermitteln, ohne dass diese hartcodiert sein müssen.
Asynchrone Kommunikation
Eine Kommunikationsform, bei der der Absender nicht auf eine sofortige Antwort wartet. Sie erfolgt typischerweise über Message Queues (z.B. RabbitMQ, Kafka) oder Events (z.B. EventBus).

Architektur-Diagramm

flowchart TB
  Client[Client-Anwendung] --> APIGW[API-Gateway]
  APIGW --> Auth[Authentifizierung]
  APIGW --> Service1[Microservice 1]
  APIGW --> Service2[Microservice 2]
  APIGW --> Service3[Microservice 3]
  
  Service1 --> ServiceDiscovery[Service-Registry]
  Service2 --> ServiceDiscovery
  Service3 --> ServiceDiscovery
  
  Service1 --> MessageQueue[Message Queue]
  Service2 --> MessageQueue
  Service3 --> MessageQueue
  
  MessageQueue --> EventProcessor[Event Processor]

Praktische Schritte

  1. Definieren Sie die Domänengrenzen für Ihre Microservices basierend auf Geschäftsfunktionen. Dies stellt sicher, dass jeder Service eine klare Verantwortung hat.
  2. Implementieren Sie ein API-Gateway mit einem Framework wie Spring Cloud Gateway oder NGINX, um den Zugriff auf Ihre Services zu zentralisieren.
  3. npm install -g @nestjs/core @nestjs/common @nestjs/platform-express
    Installieren Sie die notwendigen Abhängigkeiten für Ihr Node.js-basiertes Microservice-Framework.
  4. Konfigurieren Sie eine Service-Registry wie Eureka oder Consul, damit Ihre Services sich gegenseitig finden können.
  5. Implementieren Sie eine Message Queue mit RabbitMQ oder Apache Kafka für asynchrone Kommunikation zwischen Services.
  6. docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
    Starten Sie einen RabbitMQ-Container für die Nachrichtenverarbeitung.
  7. Definieren Sie klare Service-Verträge mit OpenAPI/Swagger-Spezifikationen, um die Kommunikation zwischen Frontend und Backend zu standardisieren.
  8. Implementieren Sie Circuit-Breaker-Muster in Ihren Services, um Ausfallkaskaden zu verhindern, wenn ein Dienst nicht verfügbar ist.
  9. Richten Sie ein Logging- und Monitoring-System wie ELK-Stack (Elasticsearch, Logstash, Kibana) oder Prometheus mit Grafana ein, um die Leistung Ihrer Services zu überwachen.
  10. Implementieren Sie CI/CD-Pipelines mit Tools wie Jenkins oder GitLab CI, um automatisierte Tests und Bereitstellungen für Ihre Microservices zu ermöglichen.

Häufige Fallstricke

Weiterführende Ressourancen

Wissens-Check

Vier Fragen zur Selbstkontrolle. Klicken Sie jede Frage an, um die richtige Antwort und Erklärung zu sehen.

Was ist ein Hauptunterschied zwischen monolithischer und Microservices-Architektur?
  • A) Monolithe verwenden immer SQL-Datenbanken, Microservices verwenden NoSQL
  • B) In einer Microservices-Architektur sind Dienste eigenständig deploybar und skalierbar
  • C) Monolithe sind immer langsamer als Microservices
  • D) Microservices erfordern immer mehr Entwickler als Monolithe

Richtige Antwort: B. Die Unabhängigkeit der Dienste ist ein Kernmerkmal von Microservices. A ist falsch, da beide Architekturen verschiedene Datenbanktypen verwenden können. C ist falsch, da die Performance von der Implementierung abhängt. D ist falsch, da die Teamgröße nicht direkt von der Architektur abhängt.

Welche Funktion erfüllt ein API-Gateway in einer Microservices-Architektur?
  • A) Es speichert die Daten aller Microservices zentral
  • B) Es verwaltet die Berechtigungen für jeden Microservice einzeln
  • C) Es ist ein zentraler Einstiegspunkt für Client-Anfragen und leitet diese weiter
  • D) Es optimiert die Datenbankabfragen aller Microservices

Richtige Antwort: C. Das API-Gateway fungiert als Single Entry Point und verwaltet Anfragen. A ist falsch, da es keine Daten speichert. B ist falsch, da es Berechtigungen zentral verwaltet. D ist falsch, da es keine Datenbankabfragen optimiert.

Was ist der Zweck von Service-Discovery in einer Microservices-Architektur?
  • A) Es überwacht die Systemleistung und alarmiert bei Problemen
  • B) Es ermöglicht Microservices, die Adressen anderer Dienste dynamisch zu ermitteln
  • C) Es sichert die Kommunikation zwischen Diensten durch Verschlüsselung
  • D) Es verteilt die Last gleichmäßig auf alle verfügbaren Dienste

Richtige Antwort: B. Service-Discovery ermöglicht die dynamische Ermittlung von Dienstadressen. A beschreibt eher ein Monitoring-System. C ist Aufgabe der Sicherheitsmechanismen. D ist Aufgabe eines Load Balancers.

Welches ist ein Vorteil der asynchronen Kommunikation in Microservices-Architekturen?
  • A) Sie reduziert die Komplexität des Systems
  • B) Sie ermöglicht eine schnellere Antwortzeit für den Client
  • C) Sie erhöht die Fehlertoleranz des Systems
  • D) Sie eliminiert die Notwendigkeit von API-Gateways

Richtige Antwort: C. Asynchrone Kommunikation macht das System fehlertoleranter, da Dienste auch bei Ausfällen anderer Dienste funktionieren können. A ist falsch, da asynchrone Kommunikation die Komplexität erhöhen kann. B ist falsch, da die Antwortzeit für den Client möglicherweise länger wird. D ist falsch, da API-Gateways weiterhin benötigt werden.